#!/usr/bin/env python
# -*-coding:UTF-8-*-

"""
1. 请设计一个decorator，它可作用于任何函数上，并打印该函数的执行时间
2.请设计一个decorator，它可作用于任何函数上，要求可以接受一个int作为参数，如果该函数的执行时间大于int传递的时间话，请打印改函数名字和
执行时间.
"""

import datetime
import functools
import time


def logger(fn):
    """decorator1"""

    def wrapper(*args, **kwargs):
        start = datetime.datetime.now()
        ret = fn(*args, **kwargs)
        end = (datetime.datetime.now() - start).total_seconds()
        print('execution time {:.2f} seconds'.format(end))
        return ret

    return wrapper


@logger
def test(n):
    time.sleep(n)
    return


def logger1(m):
    """decorator2"""

    def _logger1(fn):
        def wrapper(*args, **kwargs):
            start = datetime.datetime.now()
            ret = fn(*args, **kwargs)
            end = (datetime.datetime.now() - start).total_seconds()
            if end > m:
                print('{} execution time {:.2f} seconds'.format(fn.__name__, end))
            return ret

        return functools.update_wrapper(wrapper, fn)

    return _logger1


@logger1(2)
def test1(n):
    time.sleep(n)
    # 这里不需要return吧？
    return


if __name__ == '__main__':
    for x in range(4):
        test(x)
        test1(x)
